#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
A/B测试功能演示
展示如何使用增强的提示词评估和A/B测试功能
"""

import asyncio
from src.research_core import (
    ABTester,
    advanced_evaluate_prompt_quality
)


async def demo_advanced_prompt_evaluation():
    """演示高级提示词评估功能"""
    print("=== 高级提示词评估功能演示 ===\n")
    
    # 定义测试提示词
    prompts = [
        # 简单提示词
        "写一个Python函数来计算斐波那契数列。",
        
        # 结构化提示词
        """你是一个Python编程专家，请按照以下要求编写代码：
        1. 目标：计算斐波那契数列
        2. 要求：
           - 使用递归方法实现
           - 包含适当的注释说明逻辑
           - 添加输入验证
        3. 输出格式：提供完整的可运行代码
        4. 示例：
           输入：n=5
           输出：[0, 1, 1, 2, 3, 5]""",
        
        # 详细提示词
        """作为一位资深的Python程序员，请编写一个函数来计算斐波那契数列。
        
        具体要求如下：
        1. 功能要求：
           - 实现一个名为fibonacci的函数
           - 接受一个整数参数n，表示要计算到第几项
           - 返回一个包含斐波那契数列的列表
        
        2. 技术要求：
           - 使用递归算法实现
           - 添加输入参数验证，确保n为非负整数
           - 包含异常处理机制
           - 添加详细的中文注释说明算法逻辑
        
        3. 输出要求：
           - 返回完整的可执行代码
           - 代码应遵循PEP8规范
           - 包含简单的测试用例
        
        4. 示例：
           输入：fibonacci(5)
           输出：[0, 1, 1, 2, 3, 5]
           
        请严格按照以上要求编写代码。"""
    ]
    
    # 定义需求
    requirement = "我需要一个能够帮助用户写Python代码的AI助手提示词，要求提供清晰、可运行的代码示例，并包含适当的注释解释代码逻辑。"
    
    # 评估每个提示词
    for i, prompt in enumerate(prompts, 1):
        print(f"{i}. 评估提示词版本 {i}:")
        print(f"   提示词内容: {prompt[:50]}...")
        
        # 使用高级评估函数
        evaluation = advanced_evaluate_prompt_quality(prompt, requirement)
        
        print(f"   综合得分: {evaluation['overall_score']}")
        print(f"   清晰度: {evaluation['clarity']}")
        print(f"   完整性: {evaluation['completeness']}")
        print(f"   具体性: {evaluation['specificity']}")
        print(f"   相关性: {evaluation['relevance']}")
        print(f"   结构化: {evaluation['structuredness']}")
        print()


async def demo_ab_testing():
    """演示A/B测试功能"""
    print("=== A/B测试功能演示 ===\n")
    
    # 定义不同的提示词版本
    prompt_variants = [
        # 版本1：简单提示词
        "写一个Python函数来计算斐波那契数列。",
        
        # 版本2：结构化提示词
        """你是一个Python编程专家，请按照以下要求编写代码：
        1. 目标：计算斐波那契数列
        2. 要求：
           - 使用递归方法实现
           - 包含适当的注释说明逻辑
           - 添加输入验证
        3. 输出格式：提供完整的可运行代码""",
        
        # 版本3：详细提示词
        """作为一位资深的Python程序员，请编写一个函数来计算斐波那契数列。
        
        具体要求如下：
        1. 功能要求：
           - 实现一个名为fibonacci的函数
           - 接受一个整数参数n，表示要计算到第几项
           - 返回一个包含斐波那契数列的列表
        
        2. 技术要求：
           - 使用递归算法实现
           - 添加输入参数验证，确保n为非负整数
           - 包含异常处理机制
           - 添加详细的中文注释说明算法逻辑
        
        3. 输出要求：
           - 返回完整的可执行代码
           - 代码应遵循PEP8规范
           - 包含简单的测试用例
        
        请严格按照以上要求编写代码。"""
    ]
    
    # 定义测试用例
    test_cases = [
        {"input": "计算斐波那契数列的前10项", "expected": "包含10个数字的列表"},
        {"input": "生成斐波那契数列，直到值超过100", "expected": "动态长度的列表"}
    ]
    
    # 创建A/B测试器
    tester = ABTester()
    
    # 运行A/B测试
    print("正在运行A/B测试...")
    results = await tester.run_ab_test(
        prompt_variants=prompt_variants,
        test_cases=test_cases,
        evaluation_metrics=["accuracy", "consistency", "efficiency"]
    )
    
    # 显示结果
    print("\n测试结果:")
    print("="*50)
    
    variants = results.get("variants", {})
    for variant_name, variant_data in variants.items():
        print(f"\n{variant_name}:")
        print(f"  综合得分: {variant_data['overall_score']:.2f}")
        
        variant_results = variant_data['results']
        if 'accuracy' in variant_results:
            print(f"  准确性: {variant_results['accuracy']:.2f}")
        if 'consistency' in variant_results:
            print(f"  一致性: {variant_results['consistency']:.2f}")
        if 'efficiency' in variant_results:
            print(f"  效率: {variant_results['efficiency']:.2f}")
        
        # 显示质量评估详情
        quality_eval = variant_results.get('quality_evaluation', {})
        if quality_eval:
            print(f"  质量评估:")
            print(f"    - 清晰度: {quality_eval.get('clarity', 0):.2f}")
            print(f"    - 完整性: {quality_eval.get('completeness', 0):.2f}")
            print(f"    - 具体性: {quality_eval.get('specificity', 0):.2f}")
            print(f"    - 结构化: {quality_eval.get('structuredness', 0):.2f}")
    
    print(f"\n最佳版本: {results.get('best_variant', 'N/A')}")
    
    # 显示测试摘要
    summary = results.get('test_summary', {})
    print(f"\n测试摘要:")
    print(f"  总版本数: {summary.get('total_variants', 0)}")
    print(f"  平均得分: {summary.get('average_score', 0):.2f}")
    print(f"  最高得分: {summary.get('highest_score', 0):.2f}")
    print(f"  最低得分: {summary.get('lowest_score', 0):.2f}")


async def main():
    """主函数"""
    await demo_advanced_prompt_evaluation()
    print("\n" + "="*70 + "\n")
    await demo_ab_testing()


if __name__ == "__main__":
    asyncio.run(main())